<?php

/*
 * Table/EmployeTemplateTable.php
 */

namespace RHX\Model\Table;

use Zend\Db\Adapter\Adapter;
use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\ResultSet\ResultSet;
use RHX\Model\Object\EmployeTemplate;
use Zend\Db\Sql\Select;
use Zend\Db\Sql\Where;

class EmployeTemplateTable extends AbstractTableGateway {

    protected $table = 'rh_employe_template';

    public function __construct(Adapter $adapter) {
	$this->adapter			 = $adapter;
	$this->resultSetPrototype	 = new ResultSet();
	$this->resultSetPrototype->setArrayObjectPrototype(new EmployeTemplate($adapter));
	$this->initialize();
    }

    public function getAll() {
	return $this->select();
    }

    /**
     * Récupérer un EmployeTemplate
     * 
     * @param int $id
     * @return EmployeTemplate
     * @throws \Exception
     */
    public function get($id) {
	$row = $this->select(array('id' => $id))
		->current();
	if (!$row) {
	    throw new \Exception("Impossible de trouver #$id");
	    //return new EmployeTemplate($this->adapter);
	}

	return $row;
    }

    public function save(EmployeTemplate $tpl) {
	$data	 = array(
	    'matricule'		 => $tpl->matricule,
	    'template'		 => $tpl->template,
	    'lundi_code'		 => $tpl->lundi_code,
	    'lundi_entree'		 => $tpl->lundi_entree,
	    'lundi_sortie'		 => $tpl->lundi_sortie,
	    'lundi_pause'		 => $tpl->lundi_pause,
	    'lundi_repas'		 => $tpl->lundi_repas,
	    'mardi_code'		 => $tpl->mardi_code,
	    'mardi_entree'		 => $tpl->mardi_entree,
	    'mardi_sortie'		 => $tpl->mardi_sortie,
	    'mardi_pause'		 => $tpl->mardi_pause,
	    'mardi_repas'		 => $tpl->mardi_repas,
	    'mercredi_code'		 => $tpl->mercredi_code,
	    'mercredi_entree'	 => $tpl->mercredi_entree,
	    'mercredi_sortie'	 => $tpl->mercredi_sortie,
	    'mercredi_pause'	 => $tpl->mercredi_pause,
	    'mercredi_repas'	 => $tpl->mercredi_repas,
	    'jeudi_code'		 => $tpl->jeudi_code,
	    'jeudi_entree'		 => $tpl->jeudi_entree,
	    'jeudi_sortie'		 => $tpl->jeudi_sortie,
	    'jeudi_pause'		 => $tpl->jeudi_pause,
	    'jeudi_repas'		 => $tpl->jeudi_repas,
	    'vendredi_code'		 => $tpl->vendredi_code,
	    'vendredi_entree'	 => $tpl->vendredi_entree,
	    'vendredi_sortie'	 => $tpl->vendredi_sortie,
	    'vendredi_pause'	 => $tpl->vendredi_pause,
	    'vendredi_repas'	 => $tpl->vendredi_repas,
	    'samedi_code'		 => $tpl->samedi_code,
	    'samedi_entree'		 => $tpl->samedi_entree,
	    'samedi_sortie'		 => $tpl->samedi_sortie,
	    'samedi_pause'		 => $tpl->samedi_pause,
	    'samedi_repas'		 => $tpl->samedi_repas,
	    'dimanche_code'		 => $tpl->dimanche_code,
	    'dimanche_entree'	 => $tpl->dimanche_entree,
	    'dimanche_sortie'	 => $tpl->dimanche_sortie,
	    'dimanche_pause'	 => $tpl->dimanche_pause,
	    'dimanche_repas'	 => $tpl->dimanche_repas,
	    'heure_prevues'		 => $tpl->heure_prevues,
	    'version'		 => $tpl->version,
	);
        
        /*
        if(in_array($tpl->matricule ,array(238, 261) )){
            var_dump($data);
        }*/
        
	$id	 = (int) $tpl->id;
	if ($id == 0) {
	    $this->insert($data);

	    return $this->lastInsertValue;
	}
	elseif ($this->get($id)) {
	    $this->update($data, array('id' => $id));

	    return $id;
	}
	else {
	    throw new \Exception("Impossible de trouver #$id");
	}
    }

    public function erase($id) {
	return $this->delete(array('id' => $id));
    }
    
    public function eraseTemplate($matricule, $templateId){
	$template = $this->getEmployeTemplate($matricule, $templateId);
	return $this->erase($template->id);
    }

    public function getOne($id, $matricule) {
	$row = $this->select(function(Select $select)use($id, $matricule) {
			    $where = new Where();
			    $where->equalTo('id', $id);
			    $where->equalTo('matricule', $matricule);
			    $select->where($where);
			})
		->current();

	return $row;
    }

    /**
     * Récupérer les templates correspondant à numéro de template
     *
     * @param int $template
     * @return array
     */
    public function getTemplates($template) {
	return $this->select(function(Select $select)use($template) {
			    $where = new Where();
			    $where->equalTo('template', $template);
			    //$where->literal("RIGHT(version, 1) = ?", '1');
			    $select->where($where);
			});
    }
    
    /**
     * Récupérer les templates correspondant à numéro de template
     *
     * @param int $template
     * @return array
     */
    public function getTemplatesEx2($template) {     
        
        $sql = "SELECT etpl.* FROM rh_employe_template etpl ,rh_employe e ,rh_avenant a,rh_poste p
                WHERE etpl.matricule = e.matricule
                AND e.avenant_id = a.id 
                AND a.poste_id = p.id 
                AND etpl.template = $template 
                ORDER BY p.rang ASC, e.prenom ASC ";
        
        $query = $this->getAdapter()->query($sql);
        $result = $query->execute();
        
        $templates = array();
        foreach($result as $row){
            $tpl = new EmployeTemplate($this->adapter, $row);
            $templates[] = $tpl;            
        }
      
        return $templates;
    }

    /**
     * Récupérer le template correspondant à l'employé et au numéro de template
     * 
     * @param int $matricule
     * @param int $template
     * @return EmployeTemplate
     */
    public function getEmployeTemplate($matricule, $template) {
	return $this->select(function(Select $select)use($matricule, $template) {
			    $where = new Where();
			    $where->equalTo('matricule', $matricule);
			    $where->equalTo('template', $template);
			    $select->where($where);
			})->current();
    }
    
    public function executeQuery($sql) {
	return $this->adapter
			->query($sql)
			->execute();
    }

}

?>
